Skip to content

修复 bool 相关的示例代码 #80

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

frederick-vs-ja
Copy link
Contributor

Fixes #74.

严格来说标准并未要求 sizeof(bool) == 1,并且标准允许字节有更多的位。更正后的写法只是适用于绝大多数平台。


```cpp
char c = 0;
bool b = *(bool *)&c; // 可以,b = false
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

为什么把原来的代码删除了?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

原来的写法导致 UB。你觉得应该保留吗?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

你是说 bool b = *(bool *)&c; 是UB?为什么?据我所知char和任意类型的“类型双关”都是允许的,bool和char当然也是可以“类型双关”的。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

你是说 bool b = *(bool *)&c; 是UB?为什么?据我所知char和任意类型的“类型双关”都是允许的,bool和char当然也是可以“类型双关”的。

这里的类型双关是单向的。只能通过 char 泛左值访问 bool 对象,但不能反过来。是否有什么资料导致你认为类型双关是双向的呢?

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

bool 泛左值访问 char 变量是未定义行为
2 participants